/**
 * 
 */
package algj.compilador.arvoresintatica.expressao;

import algj.compilador.GramaticaAlgJ;
import algj.compilador.arvoresintatica.ASTno;

/**
 * @author Laerte M. Rodrigues <laertemateus@gmail.com>
 * @version $Rev: 9 $
 */
public class ASTconstante extends ASTexpressao {

	public ASTconstante(int i) {
		super(i);
	}

	public ASTconstante(GramaticaAlgJ p, int i) {
		super(p, i);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see algj.compilador.arvoresintatica.expressao.ASTexpressao#getTipo()
	 */
	@Override
	public TipoDado getTipo() throws Exception {
		// Verifica se o valor armazenado é um inteiro
		try {
			Integer.parseInt(firstToken.image);
			return TipoDado.INTEIRO;
		} catch(Exception ex) {
		}

		// Verifica se o valor armazenado é um real
		try {
			Double.parseDouble(firstToken.image);
			return TipoDado.REAL;
		} catch(Exception ex) {
		}

		// Verifica se é do tipo booleano
		if (firstToken.image.equalsIgnoreCase("verdadeiro")
				|| firstToken.image.equalsIgnoreCase("falso")) {
			return TipoDado.LOGICO;
		}

		//Último caso: é string
		return TipoDado.CARACTER;
	}
}
